<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>错误的穿透</title>
</head>
<body>
<!--
    Promise 错误穿透：
        (1). 当使用 Promise 的 then 链式调用时，可以在最后用 catch 指定一个失败的回调。
        (2). 前面任何操作出了错误，都会传到最后失败的回调中处理了。（底层：默认存在 reason => {throw reason} ）
    备注：如果不存在 then 的链式调用，就不需要考虑 then 的错误穿透
 -->

<script type="text/javascript">
    // 另一个例子演示错误的穿透
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(-1)
        }, 1000)
    })
    p
        .then(
            value => {
                console.log('成功了1', value)
                throw 999
            },
            // 如果不写，程序底层会自动加上
            reason => {
                throw reason
            }
        )
        .then(
            value => {
                console.log('成功了2', value)
                return Promise.reject(-888)
            },
            reason => {
                console.log('123')
                throw reason
            }
        )
        .catch(reason => {
            console.log('失败了', reason)
        })
</script>
</body>
</html>
